﻿using CristoRessuscitado.BancoDados;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CristoRessuscitado.Formularios
{
    public partial class FormCadFuncao : Form, IFormCadPadrao
    {
        private DatabaseContext dbContext;

        public  bool            FlagAlteracao       { get; set; }
        public  int             IdRegistro      { get; set; }

        private Funcao          funcao;

        public FormCadFuncao()
        {
            InitializeComponent();
        }

        // ---------------------------------------------------------------------------------------------------------------------------
        //
        // Eventos
        //
        // ---------------------------------------------------------------------------------------------------------------------------

        private void FormCadFuncao_Load(object sender, EventArgs e)
        {
            Inicializar();
        }

        private void FormCadFuncao_KeyDown(object sender, KeyEventArgs e)
        {
            OnTecladoKeyDown(e);
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (Validar())
            {
                Salvar();
                Close();
            }
        }

        // ---------------------------------------------------------------------------------------------------------------------------
        //
        // Eventos
        //
        // ---------------------------------------------------------------------------------------------------------------------------

        public void OnTecladoKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == (Keys.Escape))
            {
                Close();
            }
        }

        public void Inicializar()
        {
            dbContext = new DatabaseContext();
            KeyPreview = true;

            if (!FlagAlteracao)
            {
                Text = "Incluir novo Registro";

                funcao = new Funcao();

                PopularCamposParaInclusao();
            }
            else
            {
                Text = "Alterar Registro";

                funcao = dbContext.Funcao.Find(IdRegistro);

                PopularCamposParaAlteracao();
            }
        }

        public void PopularCamposParaInclusao()
        { }

        public void PopularCamposParaAlteracao()
        {
            tbNome.Text = funcao.Nome;
            richtbDescricao.Text = funcao.Descricao;
        }

        public bool Validar()
        {
            string nomeFuncao = tbNome.Text.Trim();
            if (string.IsNullOrEmpty(nomeFuncao))
            {
                MessageBox.Show("Nome inválido.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                tbNome.Focus();
                return false;
            }
            if (nomeFuncao.Length > 150)
            {
                MessageBox.Show("O nome deve ser menor que 150 caracteres.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                tbNome.Focus();
                return false;
            }

            return true;
        }

        public void Salvar()
        {
            if (!FlagAlteracao)
            {
                funcao.Nome = tbNome.Text.Trim();
                funcao.Descricao = richtbDescricao.Text.Trim();
                dbContext.Funcao.Add(funcao);   
            }
            else
            {
                funcao.Nome = tbNome.Text.Trim();
                funcao.Descricao = richtbDescricao.Text.Trim();
            }

            dbContext.SaveChanges();
        }
    }
}
